Reactμ experimental_useSubscription APIλ₯Ό μ¬μ©ν λ©λͺ¨λ¦¬ κ΄λ¦¬μ λν μ’ ν© κ°μ΄λμ λλ€. ꡬλ μλͺ μ£ΌκΈ°λ₯Ό μ΅μ ννκ³ , λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νλ©°, κ²¬κ³ ν React μ ν리μΌμ΄μ μ ꡬμΆνλ λ°©λ²μ μμ보μΈμ.
React experimental_useSubscription: ꡬλ λ©λͺ¨λ¦¬ μ μ΄ λ§μ€ν°νκΈ°
Reactμ experimental_useSubscription ν
μ μμ§ μ€ν λ¨κ³μ μμ§λ§, React μ»΄ν¬λνΈ λ΄μμ ꡬλ
μ κ΄λ¦¬νλ κ°λ ₯ν λ©μ»€λμ¦μ μ 곡ν©λλ€. μ΄ λΈλ‘κ·Έ ν¬μ€νΈμμλ experimental_useSubscriptionμ 볡μ‘ν λΆλΆ, νΉν λ©λͺ¨λ¦¬ κ΄λ¦¬ μΈ‘λ©΄μ μ΄μ μ λ§μΆ° μμΈν μμλ΄
λλ€. ꡬλ
μλͺ
μ£ΌκΈ°λ₯Ό ν¨κ³Όμ μΌλ‘ μ μ΄νκ³ , μΌλ°μ μΈ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νλ©°, React μ ν리μΌμ΄μ
μ μ±λ₯μ μ΅μ ννλ λ°©λ²μ νꡬν κ²μ
λλ€.
experimental_useSubscriptionμ΄λ 무μμΈκ°?
experimental_useSubscription ν
μ λ°μ΄ν° ꡬλ
μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκΈ° μν΄ μ€κ³λμμΌλ©°, νΉν μ€ν μ΄, λ°μ΄ν°λ² μ΄μ€ λλ μ΄λ²€νΈ μλ―Έν°μ κ°μ μΈλΆ λ°μ΄ν° μμ€λ₯Ό λ€λ£° λ μ μ©ν©λλ€. μ΄ ν
μ λ°μ΄ν° λ³κ²½ μ¬νμ ꡬλ
νκ³ μ»΄ν¬λνΈκ° λ§μ΄νΈ ν΄μ λ λ μλμΌλ‘ ꡬλ
μ ν΄μ§νμ¬ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νλ κ³Όμ μ λ¨μννλ κ²μ λͺ©νλ‘ ν©λλ€. μ΄λ μ»΄ν¬λνΈμ λ§μ΄νΈ λ° λ§μ΄νΈ ν΄μ κ° λΉλ²ν 볡μ‘ν μ ν리μΌμ΄μ
μμ νΉν μ€μν©λλ€.
μ£Όμ μ΄μ :
- κ°μνλ ꡬλ κ΄λ¦¬: ꡬλ κ΄λ¦¬λ₯Ό μν λͺ ννκ³ κ°κ²°ν APIλ₯Ό μ 곡ν©λλ€.
- μλ ꡬλ ν΄μ§: μ»΄ν¬λνΈκ° λ§μ΄νΈ ν΄μ λ λ ꡬλ μ΄ μλμΌλ‘ μ 리λλλ‘ λ³΄μ₯νμ¬ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§ν©λλ€.
- μ΅μ νλ μ±λ₯: λμμ± λ λλ§ λ° ν¨μ¨μ μΈ μ λ°μ΄νΈλ₯Ό μν΄ Reactμ μν΄ μ΅μ νλ μ μμ΅λλ€.
λ©λͺ¨λ¦¬ κ΄λ¦¬ λ¬Έμ μ΄ν΄νκΈ°
μ μ ν κ΄λ¦¬ μμ΄λ ꡬλ μ΄ μ½κ² λ©λͺ¨λ¦¬ λμλ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ΄λ€ μ»΄ν¬λνΈκ° λ°μ΄ν° μ€νΈλ¦Όμ ꡬλ νμ§λ§ λ μ΄μ νμνμ§ μμ λ ꡬλ μ ν΄μ§νμ§ μλλ€κ³ μμν΄ λ³΄μμμ€. ꡬλ μ λ©λͺ¨λ¦¬μ κ³μ μ‘΄μ¬νλ©° 리μμ€λ₯Ό μλΉνκ³ μ μ¬μ μΌλ‘ μ±λ₯ λ¬Έμ λ₯Ό μΌμΌν΅λλ€. μκ°μ΄ μ§λ¨μ λ°λΌ μ΄λ¬ν κ³ μ ꡬλ (orphaned subscriptions)μ΄ μΆμ λμ΄ μλΉν λ©λͺ¨λ¦¬ μ€λ²ν€λλ₯Ό μ λ°νκ³ μ ν리μΌμ΄μ μλλ₯Ό μ νμν΅λλ€.
μ μμ μΈ λ§₯λ½μμ μ΄λ λ€μν λ°©μμΌλ‘ λνλ μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ€μκ° μ£Όμ κ±°λ μ ν리μΌμ΄μ μλ μμ₯ λ°μ΄ν°μ ꡬλ νλ μ»΄ν¬λνΈκ° μμ μ μμ΅λλ€. μ΄λ¬ν ꡬλ μ΄ μ λλ‘ κ΄λ¦¬λμ§ μμΌλ©΄ λ³λμ±μ΄ ν° μμ₯ μ§μμ μ¬μ©μλ μ ν리μΌμ΄μ μ΄ μ¦κ°νλ λμλ ꡬλ μ μ²λ¦¬νλ λ° μ΄λ €μμ κ²ͺμΌλ©΄μ μλΉν μ±λ₯ μ νλ₯Ό κ²½νν μ μμ΅λλ€.
λ©λͺ¨λ¦¬ μ μ΄λ₯Ό μν experimental_useSubscription μ¬μΈ΅ λΆμ
experimental_useSubscription ν
μ μ΄λ¬ν ꡬλ
μ κ΄λ¦¬νκ³ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νλ ꡬ쑰μ μΈ λ°©λ²μ μ 곡ν©λλ€. μ΄ ν
μ ν΅μ¬ κ΅¬μ± μμμ ν¨κ³Όμ μΈ λ©λͺ¨λ¦¬ κ΄λ¦¬μ μ΄λ»κ² κΈ°μ¬νλμ§ μ΄ν΄λ³΄κ² μ΅λλ€.
1. options κ°μ²΄
experimental_useSubscriptionμ μ£Όμ μΈμλ ꡬλ
μ ꡬμ±νλ options κ°μ²΄μ
λλ€. μ΄ κ°μ²΄μλ λͺ κ°μ§ μ€μν μμ±μ΄ ν¬ν¨λμ΄ μμ΅λλ€:
create(dataSource): μ΄ ν¨μλ ꡬλ μ μμ±νλ μν μ ν©λλ€.dataSourceλ₯Ό μΈμλ‘ λ°μsubscribeμgetValueλ©μλλ₯Ό κ°μ§ κ°μ²΄λ₯Ό λ°νν΄μΌ ν©λλ€.subscribe(callback): μ΄ λ©μλλ ꡬλ μ μ€μ νκΈ° μν΄ νΈμΆλ©λλ€. λ°μ΄ν° μμ€κ° μ κ°μ λ΄λ³΄λΌ λλ§λ€ νΈμΆλμ΄μΌ νλ μ½λ°± ν¨μλ₯Ό λ°μ΅λλ€. μ€μν μ μ, μ΄ ν¨μλ λ°λμ ꡬλ ν΄μ§(unsubscribe) ν¨μλ₯Ό λ°νν΄μΌ νλ€λ κ²μ λλ€.getValue(source): μ΄ λ©μλλ λ°μ΄ν° μμ€μμ νμ¬ κ°μ κ°μ Έμ€κΈ° μν΄ νΈμΆλ©λλ€.
2. ꡬλ ν΄μ§ ν¨μ
subscribe λ©μλκ° κ΅¬λ
ν΄μ§ ν¨μλ₯Ό λ°νν΄μΌ νλ μ±
μμ λ©λͺ¨λ¦¬ κ΄λ¦¬μ μμ΄ κ°μ₯ μ€μν©λλ€. μ΄ ν¨μλ μ»΄ν¬λνΈκ° λ§μ΄νΈ ν΄μ λκ±°λ dataSourceκ° λ³κ²½λ λ Reactμ μν΄ νΈμΆλ©λλ€(μ΄ λΆλΆμ λμ€μ λ μμΈν μ€λͺ
ν©λλ€). λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νλ €λ©΄ μ΄ ν¨μ λ΄μμ ꡬλ
μ μ μ νκ² μ 리νλ κ²μ΄ νμμ μ
λλ€.
μμ:
```javascript import { experimental_useSubscription as useSubscription } from 'react'; import { myDataSource } from './data-source'; // μΈλΆ λ°μ΄ν° μμ€λ‘ κ°μ function MyComponent() { const options = { create: () => ({ getValue: () => myDataSource.getValue(), subscribe: (callback) => { const unsubscribe = myDataSource.subscribe(callback); return unsubscribe; // ꡬλ ν΄μ§ ν¨μ λ°ν }, }), }; const data = useSubscription(myDataSource, options); return (μ΄ μμμμ myDataSource.subscribe(callback)μ νΈμΆλ λ λ°μ΄ν° μμ€μ 리μ€λμμ μ½λ°±μ μ κ±°νλ ν¨μλ₯Ό λ°ννλ€κ³ κ°μ ν©λλ€. μ΄ κ΅¬λ
ν΄μ§ ν¨μλ subscribe λ©μλμ μν΄ λ°νλμ΄ Reactκ° κ΅¬λ
μ μ μ νκ² μ 리ν μ μλλ‘ λ³΄μ₯ν©λλ€.
experimental_useSubscriptionμΌλ‘ λ©λͺ¨λ¦¬ λμ λ°©μ§λ₯Ό μν λͺ¨λ² μ¬λ‘
λ€μμ μ΅μ μ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μν΄ experimental_useSubscriptionμ μ¬μ©ν λ λ°λΌμΌ ν λͺ κ°μ§ μ£Όμ λͺ¨λ² μ¬λ‘μ
λλ€:
1. νμ ꡬλ ν΄μ§ ν¨μ λ°ννκΈ°
μ΄κ²μ΄ κ°μ₯ μ€μν λ¨κ³μ
λλ€. subscribe λ©μλκ° νμ ꡬλ
μ μ μ νκ² μ 리νλ ν¨μλ₯Ό λ°ννλλ‘ νμμμ€. μ΄ λ¨κ³λ₯Ό 무μνλ κ²μ experimental_useSubscriptionμ μ¬μ©ν λ λ©λͺ¨λ¦¬ λμλ₯Ό μΌμΌν€λ κ°μ₯ νν μμΈμ
λλ€.
2. λμ λ°μ΄ν° μμ€ μ²λ¦¬νκΈ°
μ»΄ν¬λνΈκ° μλ‘μ΄ dataSource propμ λ°μΌλ©΄, Reactλ μλμΌλ‘ μ λ°μ΄ν° μμ€λ₯Ό μ¬μ©νμ¬ κ΅¬λ
μ λ€μ μ€μ ν©λλ€. μ΄λ μΌλ°μ μΌλ‘ μνλ λμμ΄μ§λ§, μ ꡬλ
μ΄ μμ±λκΈ° μ μ μ΄μ ꡬλ
μ΄ μ μ νκ² μ 리λμλμ§ νμΈνλ κ²μ΄ μ€μν©λλ€. experimental_useSubscription ν
μ μλ ꡬλ
μμ μ ν¨ν ꡬλ
ν΄μ§ ν¨μλ₯Ό μ 곡νλ€λ©΄ μ΄ κ³Όμ μ μλμΌλ‘ μ²λ¦¬ν©λλ€.
μμ:
```javascript import { experimental_useSubscription as useSubscription } from 'react'; function MyComponent({ dataSource }) { const options = { create: () => ({ getValue: () => dataSource.getValue(), subscribe: (callback) => { const unsubscribe = dataSource.subscribe(callback); return unsubscribe; }, }), }; const data = useSubscription(dataSource, options); return (μ΄ μλ리μ€μμ dataSource propμ΄ λ³κ²½λλ©΄, Reactλ μ 곡λ ꡬλ
ν΄μ§ ν¨μλ₯Ό μ¬μ©νμ¬ μ΄μ ꡬλ
μ μ 리νκ³ μλμΌλ‘ μ΄μ λ°μ΄ν° μμ€μμ ꡬλ
μ ν΄μ§νκ³ μ λ°μ΄ν° μμ€λ₯Ό ꡬλ
ν©λλ€. μ΄λ μ¬μ©μ νλμ λ°λΌ λ€λ₯Έ WebSocket μ±λμ μ°κ²°νλ λ±, λ€λ₯Έ λ°μ΄ν° μμ€ κ°μ μ ννλ μ ν리μΌμ΄μ
μ λ§€μ° μ€μν©λλ€.
3. ν΄λ‘μ ν¨μ μ£ΌμνκΈ°
ν΄λ‘μ λ λλλ‘ μκΈ°μΉ μμ λμκ³Ό λ©λͺ¨λ¦¬ λμλ₯Ό μ λ°ν μ μμ΅λλ€. subscribe λ° unsubscribe ν¨μ λ΄μμ λ³μλ₯Ό μΊ‘μ²ν λ, νΉν ν΄λΉ λ³μκ° λ³κ²½ κ°λ₯ν(mutable) κ²½μ° μ£Όμν΄μΌ ν©λλ€. μ€μλ‘ μ€λλ μ°Έμ‘°λ₯Ό κ³μ κ°μ§κ³ μμΌλ©΄ κ°λΉμ§ 컬λ μ
μ λ°©ν΄ν μ μμ΅λλ€.
μ μ¬μ μΈ ν΄λ‘μ ν¨μ μμ: ```javascript import { experimental_useSubscription as useSubscription } from 'react'; function MyComponent() { let count = 0; // λ³κ²½ κ°λ₯ν λ³μ const options = { create: () => ({ getValue: () => myDataSource.getValue(), subscribe: (callback) => { const unsubscribe = myDataSource.subscribe(() => { count++; // λ³κ²½ κ°λ₯ν λ³μ μμ callback(); }); return unsubscribe; }, }), }; const data = useSubscription(myDataSource, options); return (
μ΄ μμμμ count λ³μλ myDataSource.subscribeμ μ λ¬λ μ½λ°± ν¨μμ ν΄λ‘μ μ μΊ‘μ²λ©λλ€. μ΄ νΉμ μμκ° μ§μ μ μΌλ‘ λ©λͺ¨λ¦¬ λμλ₯Ό μΌμΌν€μ§λ μμ μ μμ§λ§, ν΄λ‘μ κ° μ΄λ»κ² κ°λΉμ§ 컬λ μ
λμμ΄ λ μ μλ λ³μλ₯Ό κ³μ μ μ§ν μ μλμ§λ₯Ό 보μ¬μ€λλ€. λ§μ½ myDataSourceλ μ½λ°±μ΄ μ»΄ν¬λνΈμ μλͺ
μ£ΌκΈ°λ³΄λ€ μ€λ μ§μλλ€λ©΄, count λ³μλ λΆνμνκ² μ΄μμκ² λ μ μμ΅λλ€.
μν λ°©λ²: ꡬλ
μ½λ°± λ΄μμ λ³κ²½ κ°λ₯ν λ³μλ₯Ό μ¬μ©ν΄μΌ νλ κ²½μ°, useRefλ₯Ό μ¬μ©νμ¬ λ³μλ₯Ό 보κ΄νλ κ²μ κ³ λ €νμμμ€. μ΄λ κ² νλ©΄ λΆνμν ν΄λ‘μ λ₯Ό μμ±νμ§ μκ³ λ νμ μ΅μ κ°μ μ¬μ©ν μ μμ΅λλ€.
4. ꡬλ λ‘μ§ μ΅μ ννκΈ°
λΆνμν ꡬλ μ μμ±νκ±°λ μ»΄ν¬λνΈμμ νλ°νκ² μ¬μ©λμ§ μλ λ°μ΄ν°λ₯Ό ꡬλ νλ κ²μ νΌνμμμ€. μ΄λ μ ν리μΌμ΄μ μ λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μ΄κ³ μ λ°μ μΈ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€. λ©λͺ¨μ΄μ μ΄μ μ΄λ μ‘°κ±΄λΆ λ λλ§κ³Ό κ°μ κΈ°μ μ μ¬μ©νμ¬ κ΅¬λ λ‘μ§μ μ΅μ ννλ κ²μ κ³ λ €νμμμ€.
5. λ©λͺ¨λ¦¬ νλ‘νμΌλ§μ μν΄ DevTools μ¬μ©νκΈ°
React DevToolsλ μ ν리μΌμ΄μ μ μ±λ₯μ νλ‘νμΌλ§νκ³ λ©λͺ¨λ¦¬ λμλ₯Ό μλ³νλ κ°λ ₯ν λꡬλ₯Ό μ 곡ν©λλ€. μ΄ λꡬλ€μ μ¬μ©νμ¬ μ»΄ν¬λνΈμ λ©λͺ¨λ¦¬ μ¬μ©λμ λͺ¨λν°λ§νκ³ κ³ μ ꡬλ μ μλ³νμμμ€. μ μ¬μ μΈ λ©λͺ¨λ¦¬ λμ λ¬Έμ λ₯Ό λνλΌ μ μλ "Memorized Subscriptions" λ©νΈλ¦μ νΉν μ£Όμλ₯Ό κΈ°μΈμ΄μμμ€.
κ³ κΈ μλλ¦¬μ€ λ° κ³ λ € μ¬ν
1. μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μμ ν΅ν©
experimental_useSubscriptionμ Redux, Zustand, Jotaiμ κ°μ μΈκΈ° μλ μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μ μννκ² ν΅ν©λ μ μμ΅λλ€. μ΄ ν
μ μ¬μ©νμ¬ μ€ν μ΄μ λ³κ²½ μ¬νμ ꡬλ
νκ³ κ·Έμ λ°λΌ μ»΄ν¬λνΈμ μνλ₯Ό μ
λ°μ΄νΈν μ μμ΅λλ€. μ΄ μ κ·Ό λ°©μμ λ°μ΄ν° μμ‘΄μ±μ κ΄λ¦¬νκ³ λΆνμν 리λ λλ§μ λ°©μ§νλ κΉ¨λνκ³ ν¨μ¨μ μΈ λ°©λ²μ μ 곡ν©λλ€.
Redux μμ:
```javascript import { experimental_useSubscription as useSubscription } from 'react'; import { useSelector, useDispatch } from 'react-redux'; function MyComponent() { const dispatch = useDispatch(); const options = { create: () => ({ getValue: () => useSelector(state => state.myData), subscribe: (callback) => { const unsubscribe = () => {}; // Reduxλ λͺ μμ μΈ κ΅¬λ ν΄μ§κ° νμ μμ return unsubscribe; }, }), }; const data = useSubscription(null, options); return (μ΄ μμμμ μ»΄ν¬λνΈλ Reduxμ useSelectorλ₯Ό μ¬μ©νμ¬ Redux μ€ν μ΄μ myData μ¬λΌμ΄μ€μ μ κ·Όν©λλ€. getValue λ©μλλ λ¨μν μ€ν μ΄μμ νμ¬ κ°μ λ°νν©λλ€. Reduxλ λ΄λΆμ μΌλ‘ ꡬλ
κ΄λ¦¬λ₯Ό μ²λ¦¬νλ―λ‘ subscribe λ©μλλ λΉ κ΅¬λ
ν΄μ§ ν¨μλ₯Ό λ°νν©λλ€. μ°Έκ³ : Reduxλ ꡬλ
ν΄μ§ ν¨μλ₯Ό *μꡬνμ§ μμ§λ§*, νμν κ²½μ° μ»΄ν¬λνΈλ₯Ό μ€ν μ΄μμ λΆλ¦¬νλ ν¨μλ₯Ό μ 곡νλ κ²μ΄ *μ’μ μ΅κ΄*μ
λλ€. μ¬κΈ°μ νμλ κ²μ²λΌ λΉ ν¨μμΌμ§λΌλ λ§μ
λλ€.
2. μλ² μ¬μ΄λ λ λλ§(SSR) κ³ λ € μ¬ν
μλ² μ¬μ΄λ λ λλ§ μ ν리μΌμ΄μ
μμ experimental_useSubscriptionμ μ¬μ©ν λλ μλ²μμ ꡬλ
μ΄ μ΄λ»κ² μ²λ¦¬λλμ§ μ μν΄μΌ ν©λλ€. μλ²μμ μ€λ μ§μλλ ꡬλ
μ μμ±νλ κ²μ λ©λͺ¨λ¦¬ λμ λ° μ±λ₯ λ¬Έμ λ‘ μ΄μ΄μ§ μ μμΌλ―λ‘ νΌν΄μΌ ν©λλ€. μ‘°κ±΄λΆ λ‘μ§μ μ¬μ©νμ¬ μλ²μμλ ꡬλ
μ λΉνμ±ννκ³ ν΄λΌμ΄μΈνΈμμλ§ νμ±ννλ κ²μ κ³ λ €νμμμ€.
3. μ€λ₯ μ²λ¦¬
μ€λ₯λ₯Ό μ μμ μΌλ‘ μ²λ¦¬νκ³ μΆ©λμ λ°©μ§νκΈ° μν΄ create, subscribe, getValue λ©μλ λ΄μ κ°λ ₯ν μ€λ₯ μ²λ¦¬ λ‘μ§μ ꡬννμμμ€. μ€λ₯λ₯Ό μ μ νκ² κΈ°λ‘νκ³ μ»΄ν¬λνΈκ° μμ ν μ€λ¨λλ κ²μ λ°©μ§νκΈ° μν΄ λ체 κ°μ μ 곡νλ κ²μ κ³ λ €νμμμ€. μ μ¬μ μΈ μμΈλ₯Ό μ²λ¦¬νκΈ° μν΄ `try...catch` λΈλ‘μ μ¬μ©νλ κ²μ κ³ λ €νμμμ€.
μ€μ©μ μΈ μμ: κΈλ‘λ² μ ν리μΌμ΄μ μλ리μ€
1. μ€μκ° μΈμ΄ λ²μ μ ν리μΌμ΄μ
μ¬μ©μκ° ν μΈμ΄λ‘ ν μ€νΈλ₯Ό μ λ ₯νλ©΄ μ¦μ λ€λ₯Έ μΈμ΄λ‘ λ²μλλ κ²μ λ³Ό μ μλ μ€μκ° λ²μ μ ν리μΌμ΄μ μ μμν΄ λ³΄μμμ€. μ»΄ν¬λνΈλ λ²μμ΄ λ³κ²½λ λλ§λ€ μ λ°μ΄νΈλ₯Ό λ΄λ³΄λ΄λ λ²μ μλΉμ€μ ꡬλ ν μ μμ΅λλ€. μ¬μ©μκ° μΈμ΄λ₯Ό μ νν λ μ ν리μΌμ΄μ μ΄ λ°μμ±μ μ μ§νκ³ λ©λͺ¨λ¦¬ λμκ° λ°μνμ§ μλλ‘ νλ €λ©΄ μ μ ν ꡬλ κ΄λ¦¬κ° λ§€μ° μ€μν©λλ€.
μ΄ μλ리μ€μμ experimental_useSubscriptionμ λ²μ μλΉμ€μ ꡬλ
νκ³ μ»΄ν¬λνΈμ λ²μλ ν
μ€νΈλ₯Ό μ
λ°μ΄νΈνλ λ° μ¬μ©λ μ μμ΅λλ€. ꡬλ
ν΄μ§ ν¨μλ μ»΄ν¬λνΈκ° λ§μ΄νΈ ν΄μ λκ±°λ μ¬μ©μκ° λ€λ₯Έ μΈμ΄λ‘ μ νν λ λ²μ μλΉμ€μμ μ°κ²°μ λλ μν μ ν©λλ€.
2. κΈλ‘λ² κΈμ΅ λμ보λ
μ€μκ° μ£Όκ°, νμ¨, μμ₯ λ΄μ€λ₯Ό νμνλ κΈμ΅ λμ보λλ λ°μ΄ν° ꡬλ μ ν¬κ² μμ‘΄ν κ²μ λλ€. μ»΄ν¬λνΈλ λμμ μ¬λ¬ λ°μ΄ν° μ€νΈλ¦Όμ ꡬλ ν μ μμ΅λλ€. λΉν¨μ¨μ μΈ κ΅¬λ κ΄λ¦¬λ νΉν λ€νΈμν¬ μ§μ° μκ°μ΄ κΈΈκ±°λ λμνμ΄ μ νλ μ§μμμ μ¬κ°ν μ±λ₯ λ¬Έμ λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
experimental_useSubscriptionμ μ¬μ©νμ¬ κ° μ»΄ν¬λνΈλ κ΄λ ¨ λ°μ΄ν° μ€νΈλ¦Όμ ꡬλ
νκ³ μ»΄ν¬λνΈκ° λ μ΄μ 보μ΄μ§ μκ±°λ μ¬μ©μκ° λμ보λμ λ€λ₯Έ μΉμ
μΌλ‘ μ΄λν λ ꡬλ
μ΄ μ μ νκ² μ 리λλλ‘ ν μ μμ΅λλ€. μ΄λ λλμ μ€μκ° λ°μ΄ν°λ₯Ό μ²λ¦¬ν λμλ λΆλλ½κ³ λ°μμ± μλ μ¬μ©μ κ²½νμ μ μ§νλ λ° λ§€μ° μ€μν©λλ€.
3. νμ λ¬Έμ νΈμ§ μ ν리μΌμ΄μ
μ¬λ¬ μ¬μ©μκ° λμμ λμΌν λ¬Έμλ₯Ό νΈμ§ν μ μλ νμ λ¬Έμ νΈμ§ μ ν리μΌμ΄μ μ μ€μκ° μ λ°μ΄νΈμ λκΈ°νκ° νμν©λλ€. μ»΄ν¬λνΈλ λ€λ₯Έ μ¬μ©μκ° λ§λ λ³κ²½ μ¬νμ ꡬλ ν μ μμ΅λλ€. μ΄ μλ리μ€μμμ λ©λͺ¨λ¦¬ λμλ λ°μ΄ν° λΆμΌμΉ λ° μ ν리μΌμ΄μ λΆμμ μΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
experimental_useSubscriptionμ λ¬Έμ λ³κ²½ μ¬νμ ꡬλ
νκ³ κ·Έμ λ°λΌ μ»΄ΠΏΠΎλνΈμ μ½ν
μΈ λ₯Ό μ
λ°μ΄νΈνλ λ° μ¬μ©λ μ μμ΅λλ€. ꡬλ
ν΄μ§ ν¨μλ μ¬μ©μκ° λ¬Έμλ₯Ό λ«κ±°λ νΈμ§ νμ΄μ§μμ λ²μ΄λ λ λ¬Έμ λκΈ°ν μλΉμ€μμ μ°κ²°μ λλ μν μ ν©λλ€. μ΄λ μ¬λ¬ μ¬μ©μκ° λμΌν λ¬Έμμμ νμ
νλλΌλ μ ν리μΌμ΄μ
μ΄ μμ μ μ΄κ³ μ λ’°ν μ μλλ‘ λ³΄μ₯ν©λλ€.
κ²°λ‘
Reactμ experimental_useSubscription ν
μ React μ»΄ν¬λνΈ λ΄μμ ꡬλ
μ κ΄λ¦¬νλ κ°λ ₯νκ³ ν¨μ¨μ μΈ λ°©λ²μ μ 곡ν©λλ€. λ©λͺ¨λ¦¬ κ΄λ¦¬μ μμΉμ μ΄ν΄νκ³ μ΄ λΈλ‘κ·Έ ν¬μ€νΈμμ μ€λͺ
ν λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄, ν¨κ³Όμ μΌλ‘ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νκ³ , μ ν리μΌμ΄μ
μ±λ₯μ μ΅μ ννλ©°, κ²¬κ³ νκ³ νμ₯ κ°λ₯ν React μ ν리μΌμ΄μ
μ ꡬμΆν μ μμ΅λλ€. νμ ꡬλ
ν΄μ§ ν¨μλ₯Ό λ°ννκ³ , λμ λ°μ΄ν° μμ€λ₯Ό μ μ€νκ² μ²λ¦¬νλ©°, ν΄λ‘μ ν¨μ μ μ£Όμνκ³ , ꡬλ
λ‘μ§μ μ΅μ ννκ³ , λ©λͺ¨λ¦¬ νλ‘νμΌλ§μ μν΄ DevToolsλ₯Ό μ¬μ©νλ κ²μ κΈ°μ΅νμμμ€. experimental_useSubscriptionμ΄ κ³μ λ°μ ν¨μ λ°λΌ, κ·Έ κΈ°λ₯κ³Ό νκ³μ λν μ 보λ₯Ό κ³μ νμ
νλ κ²μ 볡μ‘ν λ°μ΄ν° ꡬλ
μ ν¨κ³Όμ μΌλ‘ μ²λ¦¬ν μ μλ κ³ μ±λ₯ React μ ν리μΌμ΄μ
μ ꡬμΆνλ λ° μ€μν κ²μ
λλ€. React 18 κΈ°μ€μΌλ‘ useSubscriptionμ μμ§ μ€νμ μΈ κΈ°λ₯μ΄λ―λ‘, API λ° μ¬μ©λ²μ λν μ΅μ μ
λ°μ΄νΈμ κΆμ₯ μ¬νμ νμ 곡μ React λ¬Έμλ₯Ό μ°Έμ‘°νμμμ€.